package com.nbsaas.boot.product.data.repository;

import com.nbsaas.boot.product.data.entity.PageComponent;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.jpa.repository.support.JpaRepositoryImplementation;
import org.springframework.data.repository.query.Param;

import java.io.Serializable;
import java.util.List;

/**
* 页面组件-数据处理功能
*/
public interface PageComponentRepository extends JpaRepositoryImplementation<PageComponent, Serializable> {

    /**
     * 根据布局ID查找组件
     */
    List<PageComponent> findByLayoutIdOrderBySort(Long layoutId);

    /**
     * 根据组件类型查找
     */
    List<PageComponent> findByComponentType(String componentType);

    /**
     * 根据是否显示查找
     */
    List<PageComponent> findByVisible(Boolean visible);

    /**
     * 根据布局ID和组件类型查找
     */
    @Query("SELECT pc FROM PageComponent pc WHERE pc.layoutId = :layoutId AND pc.componentType = :componentType ORDER BY pc.sort")
    List<PageComponent> findByLayoutIdAndComponentType(@Param("layoutId") Long layoutId, @Param("componentType") String componentType);

    /**
     * 查找可见的组件
     */
    @Query("SELECT pc FROM PageComponent pc WHERE pc.visible = true ORDER BY pc.sort")
    List<PageComponent> findVisibleComponents();

    /**
     * 根据数据源类型查找
     */
    List<PageComponent> findByDataSourceType(String dataSourceType);
} 